home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / 24BitChunky / cia.i < prev    next >
Encoding:
Text File  |  1996-08-14  |  1.7 KB  |  98 lines

  1.  
  2.         IFEQ A-CIAchip
  3. _cia        = $bfe001
  4. control        = _cia+ciacra
  5.         ELSE
  6. _cia        = $bfd000
  7. control        = _cia+ciacrb
  8.         ENDC
  9.  
  10.         IFEQ A-TIMER
  11. timerlo        = _cia+ciatalo
  12. timerhi        = _cia+ciatahi
  13. intbit        = CIAICRB_TA
  14.         ELSE
  15. timerlo        = _cia+ciatblo
  16. timerhi        = _cia+ciatbhi
  17. intbit        = CIAICRB_TB
  18.         ENDC
  19.  
  20.  
  21.  
  22.  
  23. GetCIA        lea.l    cia_name,a1
  24.         CallExec OpenResource
  25.         tst.l    d0
  26.         beq    .error
  27.         move.l    d0,resource
  28.  
  29.         move.l    resource,a6
  30.         move.l    #intbit,d0
  31.         lea.l    cia_int,a1        ; the interrupt
  32.         Call    AddICRVector
  33.         tst.l    d0
  34.         beq    .noerror        
  35.  
  36.         move.l    d0,a0
  37.         move.l    LN_NAME(a0),d1
  38.         CallDos    PutStr
  39.         Print    < is already using my CIA timer!>
  40.         bra    .error
  41. .noerror
  42.         move.w    #MicroTiming,d0
  43.         move.b    d0,timerlo
  44.         lsr.w    #8,d0
  45.         move.b    d0,timerhi
  46.  
  47.         bclr.b    #CIACRAB_RUNMODE,control
  48.         or.b    #CIACRAF_LOAD|CIAICRF_TA,control
  49.  
  50.         move.w    #1<<intbit,d0
  51.         move.l    resource,a6
  52.         Call    SetICR
  53.  
  54.         move.w    #CIAICRF_SETCLR|(1<<intbit),d0
  55.         move.l    resource,a6
  56.         Call    AbleICR
  57.  
  58.         ; the interrupt is now up and running!
  59.  
  60.         clr.l    d0
  61.         rts
  62. .error        move.l    #20,d0
  63.         rts
  64.  
  65.  
  66. FreeCIA        move.l    resource,a6
  67.         move.w    #1<<intbit,d0
  68.         Call    AbleICR
  69.  
  70.         bclr.b    #CIACRAB_START,control
  71.  
  72.         move.l    resource,a6
  73.         move.l    #intbit,d0
  74.         lea.l    cia_int,a1        ; the interrupt
  75.         Call    RemICRVector
  76.         rts
  77.  
  78. *-------------------------------------------------------*
  79. *               Data                *
  80. *-------------------------------------------------------*
  81.  
  82. resource    dc.l    0
  83.  
  84.         IFEQ    A-CIAchip
  85. cia_name    dc.b    'ciaa.resource',0
  86.         ELSE
  87. cia_name    dc.b    'ciab.resource',0
  88.         ENDC
  89.  
  90. cia_int        dc.l    0,0        ; LN_SUCC, LN_PRED
  91.         dc.b    NT_INTERRUPT    ; TYPE
  92.         dc.b    127        ; Priority, for sorting
  93.         dc.l    int_name    ; ID string, null terminated
  94.         dc.l    0        ; IS_DATA
  95.         dc.l    cia_Interrupt    ; IS_CODE
  96. int_name    dc.b    "dFX cia-interrupt",0
  97.         even
  98.